Why would anyone bother coding an editor for NBA Live 96?  Well, I was bored and someone asked me for help hacking this game.  Since he didn't know too much about hacking, I ended up coding this application.  It is fairly basic and simple, but does allow for quite a bit of modification of the ROM.  You can alter the team names, locations,  and rosters.  You can edit the players' numbers, heights, weights, looks, stats, abilities, etc. as well.  I don't know if there's much interest in this thing, but I thought I'd put it out there just in case.  If you have questions, or would even like the source code, let me know at dejfatman@yahoo.com.



NBA 96 Editor quick start guide:

1) Open ROM file.  This must be a binary form of the game (*.BIN)

2) Select to either edit player, team, or roster.  	

	A) Editing a player will allow you to edit any of the 470 players in the game.  Not all of these players are on any team's roster.

		a) Editing from the main menu gives you access to all players, even the hidden ones.  Editing off the team menu only gives you access to the players on that team.

		b) Many fields are unknown, but you are allowed to edit them anyway.  BE CATIOUS: there isn't much data validation for these fields, so changing them can have unknown consequences in the game.

		c) "Saving" a player will immediately save the changes to the ROM in memory, but not to the ROM file.  You still must save the ROM from the main menu for changes to take.

	B) Editing a team will allow you to edit the name, location, abbreviation, etc. of that team.  You can also edit the teams' players from this option

		a) Editing from the main menu gives you access to all players, even the hidden ones.  Editing off the team menu only gives you access to the players on that team.

		b) Some fields are unknown, but you are allowed to edit them anyway.  BE CATIOUS: there isn't much data validation for these fields, so changing them can have unknown consequences in the game.

		c) Saving a team will immediately save the changes to the ROM in memory, but not to the ROM file.  You still must save the ROM from the main menu for changes to take.

		d) Using the Team editing window to then edit and save players on the player editing screen will immediately save the player changes to the ROM in memory, regardless of whether you then 'Cancel' the changes on the team editing screen.  

	C) Editing a team's rosters will change what player is assigned to what team.  Each team has 2 rosters.  The second roster is the same as the first except it is missing one player.  I believe this second roster is used by the game for drafting purposes for the expansion teams.

		a) You can put any player in any roster spot: even the same player in more than one roster spot!  This can have unknown consequences in the game.

		b) Editing rosters will only take effect the first time you open a ROM.  The first time you open the ROM, it will force you to draft for the expansion teams.  If you have already drafted and then edit rosters, the emulator will ignore these new rosters.  Changing rosters after this appears to have no effect unless you delete the files the emulator uses to store saved ROM data.

3) Save the ROM to either a new file name (recommended) or overwrite the original ROM.

There is also an import/export feature which will export all players to a .CSV (Excel comma delimited file).  You can alter the players there, and then import the file back into the ROM.





Some technical info:

The game stores the team and player info in several tables.  Here is a description of each table:

-Player pointer table: This table points to the location in the ROM where a particular player's data resides.  There are 470 4-byte pointers.  The first is for player 0, the second for player 1, etc.

-Player data table: This table contains 100 bytes of player data, followed by a variable length name.  The player pointer table is used to reference it.  This editor makes the player names fixed length (13 bytes for first and last name each), so it rewrites the player pointer table described above.

-Roster table: This table contains 28 bytes for each of each team's 2 rosters.  Each roster has 14 players, so every 2 bytes is a player number (0 - 470) or the value 511 (hex 1FF) for an empty spot.  In hex, Atlanta's second roster (players 0 - 13) looks like this: 

P1--- P2--- P3--- P4--- P5--- P6--- P7--- P8--- P9--- P10-- P11-- P12-- P13-- P14--
00 00 00 01 00 02 00 03 00 04 00 05 00 07 00 08 00 09 00 0A 00 0B 00 0C 00 0D 01 FF

There are 29 rosters, 1 for each team, and immediately after 29 more rosters, 1 for each team.  The second roster for each team has one less player.  I think the ommitted players in the second roster are players eligible to be drafted by the expansion teams.

-Team pointer table: This table points to the location in the ROM where a particular team's data resides.  There are 35 teams (including all star, etc.) so there are 35 4-byte pointers.

-Team data table: This table contains team names, locations, etc.  There are actually 5 variable length strings for each team, so this editor makes them all fixed length of up to 28 characters each, and rewrites the team pointer table to match the new locations.

-Team abbreviation table: Simply city name abbreviations for each team.